package model.facade;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import daos.AdministradorDAO;
import daos.CategoriaDAO;
import daos.ClienteDAO;
import daos.PedidoDAO;
import daos.ProdutoDAO;

import model.entities.Administrador;
import model.entities.Categoria;
import model.entities.Cliente;
import model.entities.Endereco;
import model.entities.Pedido;
import model.entities.Produto;
import model.entities.Usuario;

public class DeliveryFacade {
	static EntityManagerFactory factory = Persistence
			.createEntityManagerFactory("delivery");

	public Usuario autenticar(String usuario, String senha) {
		EntityManager manager = factory.createEntityManager();
		Query query = manager.createNamedQuery("Usuario.login");
		query.setParameter("login", usuario);
		query.setParameter("senha", senha);
		Usuario usuarioSelecionado = (Usuario) query.getSingleResult();
		return usuarioSelecionado;
	}

	public void inserirPedido(Pedido pedido) {
		EntityManager manager = factory.createEntityManager();
		PedidoDAO pedidoDAO = new PedidoDAO(manager);
		manager.getTransaction().begin();
		pedidoDAO.salvar(pedido);
		manager.getTransaction().commit();
	}

	public Pedido buscarPedidoPorId(Long id) {
		EntityManager manager = factory.createEntityManager();
		PedidoDAO pedidoDAO = new PedidoDAO(manager);
		return pedidoDAO.buscarPorId(id);
	}

	public void removerPedido(Pedido pedido) {
		EntityManager manager = factory.createEntityManager();
		PedidoDAO pedidoDAO = new PedidoDAO(manager);
		manager.getTransaction().begin();
		pedidoDAO.remover(pedido);
		manager.getTransaction().commit();
	}

	public static void inserirProduto(Produto produto) {
		EntityManager manager = factory.createEntityManager();
		ProdutoDAO produtoDAO = new ProdutoDAO(manager);
		manager.getTransaction().begin();
		produtoDAO.salvar(produto);
		manager.getTransaction().commit();
	}

	public Produto buscarProdutoPorId(Long id) {
		EntityManager manager = factory.createEntityManager();
		ProdutoDAO produtoDAO = new ProdutoDAO(manager);
		return produtoDAO.buscarPorId(id);
	}

	public static void removerProduto(Produto produto) {
		EntityManager manager = factory.createEntityManager();
		ProdutoDAO produtoDAO = new ProdutoDAO(manager);
		produto = produtoDAO.buscarPorId(produto.getId());
		manager.getTransaction().begin();
		produtoDAO.remover(produto);
		manager.getTransaction().commit();
	}

	public static void inserirCategoria(Categoria categoria) {
		EntityManager manager = factory.createEntityManager();
		CategoriaDAO categoriaDAO = new CategoriaDAO(manager);
		manager.getTransaction().begin();
		categoriaDAO.salvar(categoria);
		manager.getTransaction().commit();
	}

	public Categoria buscarCategoriaPorId(Long id) {
		EntityManager manager = factory.createEntityManager();
		CategoriaDAO categoriaDAO = new CategoriaDAO(manager);
		return categoriaDAO.buscarPorId(id);
	}

	public static void removerCategoria(Categoria categoria) {
		EntityManager manager = factory.createEntityManager();
		CategoriaDAO categoriaDAO = new CategoriaDAO(manager);
		categoria = categoriaDAO.buscarPorId(categoria.getId());
		manager.getTransaction().begin();
		categoriaDAO.remover(categoria);
		manager.getTransaction().commit();
	}

	public static void inserirCliente(Cliente cliente) {
		EntityManager manager = factory.createEntityManager();
		ClienteDAO clienteDAO = new ClienteDAO(manager);
		manager.getTransaction().begin();
		clienteDAO.salvar(cliente);
		manager.getTransaction().commit();
	}

	public Cliente buscarClientePorId(Long id) {
		EntityManager manager = factory.createEntityManager();
		ClienteDAO clienteDAO = new ClienteDAO(manager);
		return clienteDAO.buscarPorId(id);
	}

	public static void removerCliente(Cliente cliente) {
		EntityManager manager = factory.createEntityManager();
		ClienteDAO clienteDAO = new ClienteDAO(manager);
		cliente = clienteDAO.buscarPorId(cliente.getId());
		manager.getTransaction().begin();
		clienteDAO.remover(cliente);
		manager.getTransaction().commit();
	}

	public static void inserirAdmin(Administrador administrador) {
		EntityManager manager = factory.createEntityManager();
		AdministradorDAO administradorDAO = new AdministradorDAO(manager);
		manager.getTransaction().begin();
		administradorDAO.salvar(administrador);
		manager.getTransaction().commit();
	}

	public Administrador buscarAdminPorId(Long id) {
		EntityManager manager = factory.createEntityManager();
		AdministradorDAO administradorDAO = new AdministradorDAO(manager);
		return administradorDAO.buscarPorId(id);
	}

	public static void removerAdmin(Administrador administrador) {
		EntityManager manager = factory.createEntityManager();
		AdministradorDAO administradorDAO = new AdministradorDAO(manager);
		administrador = administradorDAO.buscarPorId(administrador.getId());
		manager.getTransaction().begin();
		administradorDAO.remover(administrador);
		manager.getTransaction().commit();

	}
}
